//leetcode 地址
//https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/
// 定义一个函数，输入一个链表的头节点，反转该链表并输出反转后链表的头节点。

//  

// 示例:

// 输入: 1->2->3->4->5->NULL
// 输出: 5->4->3->2->1->NULL

/*思路
    
    给链表 建立 last , curr ,next 记录
    翻转last与curr的指向关系 并 同时记录不断向链表末端前进
  last -> curr  ->last
  1    ->  2    ->  3    ->4->5->NULL


  last <- curr ->next
  1    ->  2    -> 3 ->  4->  5->  NULL
*/

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) 
    {
        ListNode * last = NULL;
        ListNode * curr = head;
        ListNode * next = NULL;
        while(curr)
        {
            next = curr->next;
            curr->next = last;
            last = curr;
            curr = next;
        }
        return last;
    }
};